package spark.youtube

import org.apache.spark.{SparkConf,SparkContext}

object etl {
  def main(args: Array[String]) {
    val dirPath = "/input/mr/youtube/video/"
    val output = "/output/spark/test"

    val conf = new SparkConf().setAppName("etl example")
    val sc = new SparkContext(conf)

    //val result = transform(sc,dirPath)
    val result = transform1(sc,"/input/mr/youtube/video")
    //result.saveAsTextFile(output)
    result.saveAsTextFile("/output/spark/test")
  }
  def transform1(sc:SparkContext, dirPath: String): org.apache.spark.rdd.RDD[String] = {
    val input = sc.wholeTextFiles(dirPath,4) // input RDD(String,string)，第一个 String 是目录名称，第二 String 是该目录所有文件的内容合并在一起组成一个字符串 
    val result = input
      .map(x => x._2)
      .map(_.split("\n")) // 每一行以 '\n' 分割
      .flatMap(x => x) // 打平
      .map(_.split("\t")) // 获取每个字段
      .map{x =>
        val length = x.length
        val strBuff = new StringBuffer()
        if (length >= 4) x(3) = x(3).replace(" ","")
        for (i <- 0 until length) {
          strBuff.append(x(i))
          if (i < 9) {
            if (i != length -1) strBuff.append("\t")
          } else {
            if (i != length -1) strBuff.append("&")
          }
        }
        strBuff.toString // 一行
    }
  result
  }
}

/*
原始数据：所有字段之间使用 '\t' 分割
LKh7zAJ4nwo	TheReceptionist	653	Entertainment	424	13021	4.34	1305	744	DjdA-5oKYFQ	NxTDlnOuybo	c-8VuICzXtU	DH56yrIO5nI	W1Uo5DQTtzc	E-3zXq_r4w0	1TCeoRPg5dEyAr26YhuYNY	2ZgXx72XmoE	-7ClGo-YgZ0	vmdPOOd6cxI	KRHfMQqSHpk	pIMpORZthYw	1tUDzOp10pk	heqocRij5P0	_XIuvoH6rUg	LGVU5DsezE0	uO2kj6_D8B4	xiDqywcDQRM	uX81lMev6_o
数据结构说明：
第一个字段 movieid 11个字符串，如：LKh7zAJ4nwo
第二个字段 uploader String 视频上传者，如：TheReceptionist
第三个字段 age 视频从上传哪天到当前时间的天数。如：653
第四个字段 category 视频类别，一个视频可以属于多个类别。如：Entertainment & people。类别之间使用 '&' 和空格隔开
第五个字段 length 视频长度 int 如：424
第六个字段 views 观看次数 int 如:13021
第七个字段 rate 视频评分，最高 5 分，float 如：4.34
第八个字段 rating 流量 int 如：744
第九个字段 评论数 int 744
第十个字段 relate movieid 关联电影id，最多有20个，也可以1个没有。如：DjdA-5oKYFQ	NxTDlnOuybo movieid 之间使用 '\t' 分割

需求：
1、类别之间使用 '&' 分割，去掉两边的空格，如：Entertainment&people
2、关联的 movieid 之间，使用 '&' 分割，如：DjdA-5oKYFQ&NxTDlnOuybo&c-8VuICzXtU
*/